package uk.ac.glasgow.demosocs.impl.electionTypes;

import uk.ac.glasgow.demosocs.ElectionResult;
import uk.ac.glasgow.demosocs.Vote;

/**
 * 
 * Provides functionality to cast a vote,
 * get the election result or the election type
 * for an election.
 *
 */


public abstract class ElectoralSystem {

	/**
	 * 
	 * @return String containing the election type
	 * e.g Simple Plurality or AV.
	 */
	public abstract String getName();
	
	
	/**
	 * 
	 * @return The an instance Election Result.
	 */
	public abstract ElectionResult getElectionResult();

	/**
	 * 
	 * @param v - This represents an abstract vote.
	 * Depending on the election type it could be 
	 * OneOffNVote, Referenedum Vote or Ranked Vote.
	 */
	public abstract void vote (Vote v);
	
}
